home *** CD-ROM | disk | FTP | other *** search
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- #include <time.h>
- #include <mos.h>
- #include "event.h"
- #include "graphic.h"
- #include "defs.h"
- #include "coldef.h"
-
- #define FUNC_MAX (32*1024)
-
- void CHK_snd(void);
- void CHK_eup(void);
- int PLAY_snd();
- int PLAY_eup();
- int END_eup();
- int DSP_push_tiff();
- int DSP_pop_tiff();
- void DSP_super(char *str);
- void DSP_pause(int x,int y,int cl,int bk,char *str);
- int PLT_set();
- char *WIN_file_chk();
- void WIN_putc(int no,int ch);
- void WIN_flush();
- int WIN_type(int no,int ch);
- int WIN_write_file(int no,int ch,char *file,int sw);
- int WIN_secret_chk(int no,int ch);
- int WIN_write_chk(int no,int ch);
- int WIN_read_file(int no,int ch,char *file,int sw);
- void WIN_upload(int no);
- char *WIN_get_line(int no,int ch);
- void CHILD_set(int no,int ch);
- int MAC_init(char *ag[]);
- void MEMO_insrt(int no,int ch);
- char *MEMO_get_buf(void);
- void MEMO_set_word(char *str);
- void MEMO_chk(void);
- int RSB_chk();
- int RSB_getc();
- void RSB_putc(int ch);
- void RSB_init(int port);
- void RSB_reopen(int md,int bps);
- void RSB_get_para(int *pt,int *md,int *bp);
- void RSB_end();
- int keyword(char *file,int sw);
- char *copy_file_name(char *file);
- int copy(char *file,char *new);
- int merge(char *org,char *file);
- int type(char *file);
- int COMP_lzss(char *file);
- int XMODEM_upload(char *file);
- int XMODEM_download(char *file);
- int FILE_upload(char *file);
- int CD_play();
- int CD_play_no();
- int CD_next();
- int CD_back();
- int CD_stop();
- int CD_vol_up();
- int CD_vol_down();
- int CD_vol_set();
- int CD_menu();
- void DSP_anime();
- int CMDS_init();
- int patmatch(char *file,char *wild);
- int TALK_str();
- int TALK_new();
- int SND_make();
- int MSG_echo(char *argv[]);
- int MSG_input(char *argv[]);
- int MSG_yes(char *argv[]);
- int MSG_yesno(char *argv[]);
- int MSG_color(char *argv[]);
- int MSG_bakcol(char *argv[]);
- int MSG_lincol(char *argv[]);
- int MSG_open_wind(void);
- int TAB_set(void);
- int MSG_ext_cfg(char *argv[]);
- int MSG_menu_tate(char *argv[]);
- int MSG_menu_state(char *argv[]);
- int MSG_menu_syoko(char *argv[]);
- int MSG_echo(char *argv[]);
- void tsleep(int sec);
- void macvalset(char *mac,int val);
- int macval(char *mac);
- void macset(char *mac,char *str);
- char *macget(char *mac);
- int MSG_close_wind(void);
- void WIN_resize(void);
- void DSP_one_pal(int no,int r,int g,int b);
- int WIN_down_start();
- void RSB_mode_set();
- void RSB_break_out(void);
- char *get_word(char *buf,char *str);
- char *get_string(char *tmp,char *str);
- char *cutpara(char *arg,char *str);
- char *cutcmds(char *str);
- int cmp_func(char *str);
- char *prcget(char *prc);
- int secret_chk(char *file);
- int chdrv(int no);
- int mkdir(char *name);
- int rmdir(char *name);
- int chdir(char *name);
- int getdir(char *name);
- int mem_file(char *file);
- void unmem_file(char *file);
- void TANGO_set(void);
- int KEY_func_exec(char *func);
- int MSG_system(char *argv[]);
- int MSG_command(void);
-
- extern int TERM;
- extern int msg_tab;
- extern int errno;
- extern int top_event;
- extern char *func_ptr;
- extern char func_buf[];
-
- int MSG_sleep(char *argv[])
- {
- int n;
-
- if ( (n = atoi(*argv)) == 0 )
- n = 3;
- tsleep(n);
- return n;
- }
-
- int MSG_wait(char *argv[])
- {
- int ch,n,sw,x,y;
- clock_t t;
-
- DSP_mos(2);
- MOS_disp(TRUE);
-
- if ( (n = atoi(*argv)) == 0 )
- n = 3;
- t = clock() + CLK_TCK * n;
- do {
- while ( RSB_chk() > 0 ) {
- ch = RSB_getc();
- WIN_putc(TERM,ch);
- }
- WIN_flush(TERM);
- MOS_rdpos(&sw,&x,&y);
- CHK_snd();
- CHK_eup();
- } while ( sw == 0 && t > clock() );
-
- MOS_disp(FALSE);
- DSP_mos(0);
-
- return (sw != 0 ? ERR:FALSE);
- }
-
- int KEY_lock(char *argv[])
- {
- int cd=ERR;
-
- while ( *argv != NULL ) {
- if ( (cd = keyword(*(argv++),FALSE)) != 0 )
- break;
- }
- return cd;
- }
-
- int KEY_unlock(char *argv[])
- {
- int cd=ERR;
-
- while ( *argv != NULL ) {
- if ( (cd = keyword(*(argv++),TRUE)) != 0 )
- break;
- }
- return cd;
- }
-
- int FIL_unlink(char *argv[])
- {
- int cd;
-
- while ( *argv != NULL ) {
- if ( (cd = remove(*(argv++))) != 0 )
- break;
- }
- return cd;
- }
-
- int FIL_complzss(char *argv[])
- {
- int cd;
-
- while ( *argv != NULL ) {
- if ( (cd = COMP_lzss(*(argv++))) != 0 )
- break;
- }
- return cd;
- }
-
- int FIL_rename(char *argv[])
- {
- return rename(argv[0],argv[1]);
- }
-
- int FIL_copy(char *argv[])
- {
- return copy(argv[0],argv[1]);
- }
-
- int FIL_copy_name(char *argv[])
- {
- macset(argv[0],copy_file_name(argv[1]));
- return FALSE;
- }
-
- int FIL_merge(char *argv[])
- {
- return merge(argv[0],argv[1]);
- }
-
- int FIL_type(char *argv[])
- {
- return type(*argv);
- }
-
- int FIL_load(char *argv[])
- {
- return WIN_read_file(atoi(argv[0]),atoi(argv[1]),
- argv[2],atoi(argv[3]));
- }
-
- int MSG_snd(char *argv[])
- {
- while ( *argv != NULL )
- PLAY_snd(*(argv++));
- return FALSE;
- }
-
- int MSG_eup(char *argv[])
- {
- while ( *argv != NULL )
- PLAY_eup(*(argv++));
- return FALSE;
- }
-
- int MSG_tiff(char *argv[])
- {
- while ( *argv != NULL )
- DSP_push_tiff(*(argv++));
- return FALSE;
- }
- int MSG_get_time(char *argv[])
- {
- clock_t t;
-
- t = clock() / CLK_TCK;
- macvalset(argv[0],t);
- return t;
- }
- int MSG_add(char *argv[])
- {
- int n;
-
- n = macval(argv[0]);
- n += atoi(argv[1]);
- macvalset(argv[0],n);
- return n;
- }
- int MSG_sub(char *argv[])
- {
- int n;
-
- n = macval(argv[0]);
- n -= atoi(argv[1]);
- macvalset(argv[0],n);
- return n;
- }
- int TERM_getc(char *argv[])
- {
- int len,ch;
- char tmp[2];
-
- len = RSB_chk();
- if ( len > 0 ) {
- ch = RSB_getc();
- tmp[0] = ch;
- tmp[1] = '\0';
- } else
- tmp[0] = '\0';
-
- macset(argv[0],tmp);
-
- return tmp[0];
- }
- int TERM_gets(char *argv[])
- {
- int n,ch,len;
- char tmp[82];
-
- for ( n = 0 ; n < 80 ; ) {
- len = RSB_chk();
- while ( len-- > 0 && n < 80 ) {
- ch = RSB_getc();
- if ( ch == 0x0A ) {
- break;
- } else if ( ch != '\0' && ch != 0x0D )
- tmp[n++] = ch;
- }
- }
- tmp[n] = '\0';
- macset(argv[0],tmp);
- return n;
- }
- int TERM_putc(char *argv[])
- {
- RSB_putc(*argv[0]);
- return *argv[0];
- }
- int TERM_puts(char *argv[])
- {
- char *p;
-
- p = argv[0];
- while ( *p != '\0' ) {
- if ( *p != '\n' )
- RSB_putc(*p);
- p++;
- }
- return FALSE;
- }
- int MSG_wind_putc(char *argv[])
- {
- int n;
-
- n = atoi(argv[0]);
- WIN_putc(n,*argv[1]);
- return n;
- }
- int MSG_wind_puts(char *argv[])
- {
- int n;
- char *p;
-
- n = atoi(argv[0]);
- p = argv[1];
- while ( *p != '\0' )
- WIN_putc(n,*(p++));
- return n;
- }
- int MSG_wind_flush(void)
- {
- MSG_close_wind();
- WIN_resize();
- MOS_disp(FALSE);
- return FALSE;
- }
- int MSG_switch(char *argv[])
- {
- int i,fg,ch,sw,x,y;
- clock_t t,l;
- short al[20];
-
- DSP_mos(2);
- MOS_disp(TRUE);
-
- t = clock() + atoi(argv[0]) * CLK_TCK;
- for ( i = 1 ; argv[i] != NULL ; i++ )
- al[i] = 0;
-
- fg = ERR;
- do {
- while ( RSB_chk() > 0 ) {
- ch = RSB_getc();
- WIN_putc(TERM,ch);
- for ( i = 1 ; argv[i] != NULL ; i++ ) {
- if ( ch == argv[i][al[i]] ) {
- al[i]++;
- if ( argv[i][al[i]] == '\0' ) {
- fg = (i-1);
- goto ENDOF;
- }
- } else
- al[i] = 0;
- }
- }
- WIN_flush(TERM);
- l = clock();
- MOS_rdpos(&sw,&x,&y);
- } while ( l < t && sw == 0 );
-
- ENDOF:
- MOS_disp(FALSE);
- DSP_mos(0);
- return fg;
- }
-
- int MSG_mos(char *argv[])
- {
- int sw,x,y;
-
- MOS_rdpos(&sw,&x,&y);
- if ( argv[0] != NULL ) {
- macvalset(argv[0],sw);
- if ( argv[1] != NULL ) {
- macvalset(argv[1],x);
- if ( argv[2] != NULL )
- macvalset(argv[2],y);
- }
- }
- return sw;
- }
- int TERM_open(char *argv[])
- {
- int md;
-
- if ( argv[0] != NULL )
- RSB_init(atoi(argv[0]));
- else
- RSB_init(0);
-
- md = macval("_BIT") |
- (macval("_PARISW") << 1) |
- (macval("_PARITY") << 2) |
- (macval("_STOPBIT") << 3) |
- (macval("_XONXOFF") << 4);
- RSB_reopen(md,macval("_BPS"));
-
- return FALSE;
- }
- int TERM_para(void)
- {
- int pt,md,bp;
-
- RSB_get_para(&pt,&md,&bp);
- macvalset("_PORT",pt);
- macvalset("_BIT",md & 1);
- macvalset("_PARISW",(md >> 1) & 1);
- macvalset("_PARITY",(md >> 2) & 1);
- macvalset("_STOPBIT",(md >> 3) & 1);
- macvalset("_XONXOFF",(md >> 4) & 1);
- macvalset("_BPS",bp);
- return pt;
- }
- int TERM_close()
- {
- RSB_end();
- return FALSE;
- }
- int MSG_wind_type(char *argv[])
- {
- return WIN_type(atoi(argv[0]),atoi(argv[1]));
- }
- int MSG_wind_save(char *argv[])
- {
- return WIN_write_file(atoi(argv[0]),atoi(argv[1]),
- argv[2],atoi(argv[3]));
- }
- int MSG_wind_file(char *argv[])
- {
- char *p;
-
- p = WIN_file_chk(atoi(argv[0]),atoi(argv[1]));
- macset(argv[2],p == NULL ? "":p);
-
- return ( p == NULL ? ERR:FALSE);
- }
- int MSG_wind_secret(char *argv[])
- {
- int n;
-
- n = WIN_secret_chk(atoi(argv[0]),atoi(argv[1]));
- macvalset(argv[2],n);
- return n;
- }
- int MSG_wind_wrt_chk(char *argv[])
- {
- int n;
-
- n = WIN_write_chk(atoi(argv[0]),atoi(argv[1]));
- macvalset(argv[2],n);
- return n;
- }
- int date2day(int year,int month,int date)
- {
- int days;
-
- if (month < 3) {
- --year;
- month += 13;
- } else
- ++month;
-
- days = (year * 0x16d4l) >> 4; /* 16d.4 -> 365.25 */
- days += (month * 0x1e99al) >> 12; /* 1e.99a -> 30.6001 */
- days += date;
- return(days);
- }
- int MSG_date_day(char *argv[])
- {
- int y,m,d;
-
- sscanf(argv[0],"%d/%d/%d",&y,&m,&d);
- return date2day(y,m,d);
- }
- int MSG_super(char *argv[])
- {
- int i,n;
- char *p;
- char tmp[82];
-
- if ( (p = *(argv++)) != NULL ) {
- i = 0;
- while ( *p != '\0' ) {
- if ( *p == '\t' ) {
- n = msg_tab - (i % msg_tab);
- while ( n-- > 0 )
- tmp[i++] = ' ';
- p++;
- } else
- tmp[i++] = *(p++);
- }
- tmp[i] = '\0';
- p = tmp;
- }
- DSP_super(p);
- return FALSE;
- }
- int FIL_access(char *argv[])
- {
- FILE *fp;
-
- if ( (fp = fopen(*argv,"r")) != NULL )
- fclose(fp);
-
- return (fp == NULL ? FALSE:TRUE);
- }
- int FIL_secret_chk(char *argv[])
- {
- return secret_chk(argv[0]);
- }
- int MSG_xmodem_up(char *argv[])
- {
- return XMODEM_upload(*argv);
- }
- int MSG_xmodem_down(char *argv[])
- {
- return XMODEM_download(*argv);
- }
- int MSG_file_up(char *argv[])
- {
- int fg = FALSE;
-
- while ( fg == FALSE && *argv != NULL )
- fg = FILE_upload(*(argv++));
- return fg;
- }
- int MSG_memo(char *argv[])
- {
- MEMO_insrt(atoi(argv[0]),atoi(argv[1]));
- return FALSE;
- }
- int MSG_memo_get(char *argv[])
- {
- macset(argv[0],MEMO_get_buf());
- return FALSE;
- }
- int MSG_memo_set(char *argv[])
- {
- MEMO_set_word(argv[0]);
- MEMO_chk();
- return FALSE;
- }
- int MSG_wrtstr(char *argv[])
- {
- DSP_pause(atoi(argv[0]),atoi(argv[1]),
- atoi(argv[2]),atoi(argv[3]),
- argv[4]);
- return FALSE;
- }
-
- int MSG_anime(char *argv[])
- {
- DSP_anime(argv[0]);
- return FALSE;
- }
- int MSG_wild(char *argv[])
- {
- return patmatch(argv[0],argv[1]);
- }
- int MSG_talk_str(char *argv[])
- {
- while ( *argv != NULL )
- TALK_str(*(argv++));
- return FALSE;
- }
- int MSG_talk_new(char *argv[])
- {
- TALK_new(argv[0],argv[1]);
- return FALSE;
- }
- int MSG_make_snd(char *argv[])
- {
- return SND_make(argv[0]);
- }
- int MSG_instr(char *argv[])
- {
- int n;
- char *p,*s,*t;
-
- t = argv[0]; n = 0;
- while ( t[n] != '\0' ) {
- p = &(t[n]);
- s = argv[1];
- while ( *s != '\0' && *(p++) == *(s++) );
- if ( *s == '\0' )
- return n;
- n++;
- }
- return (-1);
- }
- int MSG_palcheng(char *argv[])
- {
- DSP_one_pal(atoi(argv[0]),
- atoi(argv[1]),atoi(argv[2]),atoi(argv[3]));
- return FALSE;
- }
- int MSG_down_load(char *argv[])
- {
- return WIN_down_start(argv[0]);
- }
- int MSG_rsb_set()
- {
- RSB_mode_set();
- return FALSE;
- }
- int MSG_cut_word(char *argv[])
- {
- int i,n;
- char *p;
- char tmp[80];
-
- i = atoi(argv[2]);
- n = strlen(argv[1]);
- if ( n < i )
- i = n;
- p = argv[1] + i;
- n = atoi(argv[3]);
- for ( i = 0 ; *p != '\0' && i < n ; i++ )
- tmp[i] = *(p++);
- tmp[i] = '\0';
- macset(argv[0],tmp);
- return n;
- }
- int MSG_error(char *argv[])
- {
- if ( argv[0] != NULL )
- macvalset(argv[0],errno);
- return errno;
- }
- int MSG_CD_vol_set(char *argv[])
- {
- CD_vol_set(atoi(*argv));
- return FALSE;
- }
- int MSG_CD_play_no(char *argv[])
- {
- CD_play_no(atoi(*argv));
- return FALSE;
- }
- int MSG_chdir(char *argv[])
- {
- char *p;
-
- if ( (p = strrchr(*argv,'\\')) != NULL && *(p+1) == '\0' )
- *p = '\0';
- p = *argv;
- if ( p[1] == ':' )
- chdrv(toupper(p[0])-'A');
- return chdir(p);
- }
- int MSG_getdir(char *argv[])
- {
- char tmp[128];
-
- if ( getdir(tmp) != FALSE )
- return ERR;
- if ( *argv != NULL )
- macset(*argv,tmp);
- return FALSE;
- }
- int MSG_mkdir(char *argv[])
- {
- return mkdir(*argv);
- }
- int MSG_rmdir(char *argv[])
- {
- return rmdir(*argv);
- }
- int MSG_mem_file(char *argv[])
- {
- return mem_file(*argv);
- }
- int MSG_unmem_file(char *argv[])
- {
- unmem_file(*argv);
- return FALSE;
- }
- int MSG_break_out(void)
- {
- RSB_break_out();
- return FALSE;
- }
- int MSG_TANGO_set(void)
- {
- TANGO_set();
- return FALSE;
- }
- int MSG_key_func(char *argv[])
- {
- return KEY_func_exec(*argv);
- }
- int MSG_exit(void)
- {
- top_event = 6; /* Looking "WHISPER.C" !! */
- return FALSE;
- }
- int MSG_wind_gets(char *argv[])
- {
- char *p;
- char tmp[84];
-
- strcpy(tmp,WIN_get_line(atoi(argv[1]),atoi(argv[2])));
- if ( (p = strchr(tmp,'\n')) != NULL )
- *p = '\0';
- macset(argv[0],tmp);
- return FALSE;
- }
- int MSG_wind_upload(char *argv[])
- {
- WIN_upload(atoi(argv[0]));
- return FALSE;
- }
- int MSG_wind_child(char *argv[])
- {
- CHILD_set(atoi(argv[0]),atoi(argv[1]));
- return FALSE;
- }
-
- int MSG_run(char *str)
- {
- static brk_flg=FALSE;
-
- int cd=0;
- int i,n;
- char *stack_bak;
- char *p,*s;
- char tmp[BUFSIZ];
- char dmy[BUFSIZ];
- char *argv[40];
- static struct {
- char *name;
- int (*func)();
- } func_tbl[]={
- { "access", FIL_access },
- { "add", MSG_add },
- { "anime", MSG_anime },
- { "bakcol", MSG_bakcol },
- { "break_out", MSG_break_out },
- { "cd_back", CD_back },
- { "cd_menu", CD_menu },
- { "cd_next", CD_next },
- { "cd_play", CD_play },
- { "cd_play_no", MSG_CD_play_no },
- { "cd_stop", CD_stop },
- { "cd_vol_down",CD_vol_down },
- { "cd_vol_set", MSG_CD_vol_set },
- { "cd_vol_up", CD_vol_up },
- { "cfg_load", MSG_ext_cfg },
- { "chdir", MSG_chdir },
- { "cmdsset", CMDS_init },
- { "color", MSG_color },
- { "command", MSG_command },
- { "complzss", FIL_complzss },
- { "copy", FIL_copy },
- { "copy_name", FIL_copy_name },
- { "cut_word", MSG_cut_word },
- { "date2day", MSG_date_day },
- { "delete", FIL_unlink },
- { "echo", MSG_echo },
- { "error", MSG_error },
- { "eup", MSG_eup },
- { "eupstop", END_eup },
- { "exit", MSG_exit },
- { "file_down", MSG_down_load },
- { "file_up", MSG_file_up },
- { "fsecret", FIL_secret_chk },
- { "gcls", DSP_pop_tiff },
- { "getdir", MSG_getdir },
- { "input", MSG_input },
- { "instr", MSG_instr },
- { "key_func", MSG_key_func },
- { "lincol", MSG_lincol },
- { "load", FIL_load },
- { "lock", KEY_lock },
- { "macset", MAC_init },
- { "make_snd", MSG_make_snd },
- { "memo", MSG_memo },
- { "memo_get", MSG_memo_get },
- { "memo_set", MSG_memo_set },
- { "mem_file", MSG_mem_file },
- { "merge", FIL_merge },
- { "mkdir", MSG_mkdir },
- { "mosget", MSG_mos },
- { "palcheng", MSG_palcheng },
- { "palette", PLT_set },
- { "pastr", MSG_wrtstr },
- { "rename", FIL_rename },
- { "rmdir", MSG_rmdir },
- { "rs_setup", MSG_rsb_set },
- { "save", MSG_wind_save },
- { "sleep", MSG_sleep },
- { "snd", MSG_snd },
- { "stmenu", MSG_menu_state },
- { "sub", MSG_sub },
- { "super", MSG_super },
- { "switch", MSG_switch },
- { "symenu", MSG_menu_syoko },
- { "system", MSG_system },
- { "tabset", TAB_set },
- { "talk_new", MSG_talk_new },
- { "talk_str", MSG_talk_str },
- { "tango", MSG_TANGO_set },
- { "tclose", TERM_close },
- { "tgetc", TERM_getc },
- { "tgets", TERM_gets },
- { "tiff", MSG_tiff },
- { "time", MSG_get_time },
- { "tmenu", MSG_menu_tate },
- { "topen", TERM_open },
- { "tpara", TERM_para },
- { "tputc", TERM_putc },
- { "tputs", TERM_puts },
- { "type", FIL_type },
- { "unlock", KEY_unlock },
- { "unmem_file", MSG_unmem_file },
- { "wait", MSG_wait },
- { "wchild", MSG_wind_child },
- { "wclose", MSG_close_wind },
- { "wfile", MSG_wind_file },
- { "wflush", MSG_wind_flush },
- { "wgets", MSG_wind_gets },
- { "wild", MSG_wild },
- { "wnewchk", MSG_wind_wrt_chk },
- { "wopen", MSG_open_wind },
- { "wputc", MSG_wind_putc },
- { "wputs", MSG_wind_puts },
- { "wsecret", MSG_wind_secret },
- { "wtype", MSG_wind_type },
- { "wupload", MSG_wind_upload },
- { "xmodem_down",MSG_xmodem_down },
- { "xmodem_up", MSG_xmodem_up },
- { "yes", MSG_yes },
- { "yesno", MSG_yesno },
- { NULL, MSG_echo }
- };
-
- brk_flg = FALSE;
-
- while ( brk_flg == FALSE && *str != '\0' ) {
-
- str = get_word(tmp,str);
-
- if ( tmp[0] == '\0' ) {
- str++;
- continue;
- }
-
- if ( *str == '=' ) {
- str = get_string(dmy,++str);
- macset(tmp,dmy);
-
- } else if ( *str == '+' ) {
- p = macget(tmp);
- strncpy(dmy,p,BUFSIZ-10); dmy[BUFSIZ-10] = '\0';
- str = get_string(func_ptr,++str);
- strncat(dmy,func_ptr,(BUFSIZ-2)-strlen(dmy));
- dmy[BUFSIZ-2] = '\0';
- macset(tmp,dmy);
-
- } else if ( *str == '-' ) {
- str = get_string(dmy,++str);
- for ( p = dmy ; isspace(*p) ; p++ );
- s = p;
- while ( *p != '\0' && !isspace(*p) ) p++;
- *p = '\0';
- macset(tmp,s);
-
- } else if ( strcmp(tmp,"if") == 0 ) {
- str = cutpara(dmy,str);
- if ( (p = cutcmds(str)) != NULL ) {
- if ( (n = cmp_func(dmy)) != 0 ) {
- *p = '\0';
- cd = MSG_run(++str);
- *p = '}';
- }
- str = p + 1;
-
- for ( ; ; ) {
- s = get_word(tmp,str);
- if ( strcmp(tmp,"else") == 0 ) {
- if ( (p = cutcmds(s)) != NULL ) {
- if ( !n ) {
- *p = '\0';
- cd = MSG_run(++s);
- *p = '}';
- }
- str = p + 1;
- } else
- str = s;
-
- } else if ( strcmp(tmp,"elseif") == 0 ) {
- s = cutpara(dmy,s);
- if ( (p = cutcmds(s)) != NULL ) {
- if ( !n && (n = cmp_func(dmy)) != 0 ) {
- *p = '\0';
- cd = MSG_run(++s);
- *p = '}';
- }
- str = p + 1;
- } else
- str = s;
-
- } else
- break;
- }
- }
-
- } else if ( strcmp(tmp,"while") == 0 ) {
- str = cutpara(dmy,str);
- if ( (p = cutcmds(str)) != NULL ) {
- brk_flg = FALSE;
- while ( brk_flg == FALSE && cmp_func(dmy) ) {
- *p = '\0';
- cd = MSG_run(str+1);
- *p = '}';
- }
- str = p + 1;
- if ( brk_flg != ERR )
- brk_flg = FALSE;
- }
-
- } else if ( strcmp(tmp,"do") == 0 ) {
- str = cutpara(dmy,str);
- if ( (p = cutcmds(str)) != NULL ) {
- brk_flg = FALSE;
- do {
- *p = '\0';
- cd = MSG_run(str+1);
- *p = '}';
- } while ( brk_flg == FALSE && cmp_func(dmy) );
- str = p + 1;
- if ( brk_flg != ERR )
- brk_flg = FALSE;
- }
-
- } else if ( strcmp(tmp,"return") == 0 ) {
- str = cutpara(dmy,str);
- get_string(tmp,dmy);
- cd = atoi(tmp);
- brk_flg = ERR;
- break;
-
- } else if ( strcmp(tmp,"break") == 0 ) {
- brk_flg = TRUE;
- break;
-
- } else if ( strcmp(tmp,"shift") == 0 ) {
- str = cutpara(dmy,str);
- p = macget(dmy);
- while ( isspace(*p) ) p++;
- while ( *p != '\0' && !isspace(*p) ) p++;
- while ( isspace(*p) ) p++;
- strcpy(func_ptr,p);
- macset(dmy,func_ptr);
-
- } else if ( strcmp(tmp,"inc") == 0 ) {
- str = cutpara(dmy,str);
- n = atoi(macget(dmy))+1;
- sprintf(tmp,"%d",n);
- macset(dmy,tmp);
-
- } else if ( strcmp(tmp,"dec") == 0 ) {
- str = cutpara(dmy,str);
- n = atoi(macget(dmy))-1;
- sprintf(tmp,"%d",n);
- macset(dmy,tmp);
-
- } else {
- if ( strcmp(tmp,func_tbl[40].name) >= 0 )
- i = (strcmp(tmp,func_tbl[60].name) >= 0 ? 60:40);
- else
- i = (strcmp(tmp,func_tbl[20].name) >= 0 ? 20:0);
-
- for ( ; func_tbl[i].name != NULL ; i++ ) {
- if ( strcmp(tmp,func_tbl[i].name) == 0 ) {
- str = cutpara(dmy,str);
- p = dmy;
- n = 0;
- stack_bak = func_ptr;
- while ( *p != '\0' ) {
- p = get_string(func_ptr,p);
- argv[n++] = func_ptr;
- while ( func_ptr < &(func_buf[FUNC_MAX-2]) ) {
- if ( *(func_ptr++) == '\0' )
- break;
- }
- if ( *p == ',' ) p++;
- }
- argv[n] = NULL;
- cd = (*(func_tbl[i].func))(argv);
- func_ptr = stack_bak;
- sprintf(tmp,"%d",cd);
- macset("VAL",tmp);
- break;
- }
- }
- if ( func_tbl[i].name == NULL ) {
- p = prcget(tmp);
- str = cutpara(dmy,str);
- get_string(tmp,dmy);
- macset("PARA",tmp);
- cd = MSG_run(p);
- sprintf(tmp,"%d",cd);
- macset("VAL",tmp);
- brk_flg = FALSE;
- }
- }
- }
- return cd;
- }